home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 314.adf / Zc / zcsrc.lzh / IOLib / stdio / fwrite.c < prev    next >
C/C++ Source or Header  |  1989-06-15  |  687b  |  42 lines

  1. #include <stdio.h>
  2. int
  3. fwrite( buf, size, nitems, fp)
  4.     char  *buf;
  5.     int   size;
  6.     int   nitems;
  7.     register FILE  *fp;
  8. {
  9.     register long   w, rr, n;
  10.  
  11.     n = (fp->_flag |= _IORW);
  12.     if (!(n & _IOWRT)            /* not opened for write? */
  13.     || (n & (_IOERR | _IOEOF)))        /* error/eof conditions? */
  14.         return(EOF);
  15.     if(fp->_base == NULL)    /* allocate a buffer if there wasn't one */
  16.         _getbuf(fp);
  17.  
  18.     rr = 0;
  19.     n  = nitems * size;
  20.     for (;;) {
  21.         w = fp->_bsiz - fp->_cnt;
  22.         if ( w > n )
  23.             w = n;
  24.         (void)lmemcpy( fp->_ptr, buf, w ); 
  25.         rr += w;
  26.         n -= w;
  27.         buf += w;
  28.         fp->_cnt += w;
  29.  
  30.         if (n) {
  31.             w = fflush(fp);
  32.             if (w == EOF)
  33.                 return w;
  34.             continue;
  35.         }
  36.         break;
  37.     }
  38.     fflush(fp);
  39.     return (rr/size);
  40. }
  41.  
  42.